package basicJava.generics.generics2;

import java.util.Iterator;
import java.util.Random;

public class CoffeeGenerator implements Generator<Coffee>,Iterable<Coffee> {

	private Class[] types = {Cappuccino.class,Mocha.class};
	private static Random random = new Random(47);
	public  CoffeeGenerator() {
	}
	private int size = 0;
	
	public CoffeeGenerator(int size){
		this.size = size;
	}
	
	public Coffee next() {
		try {
			return (Coffee) types[random.nextInt(types.length)].newInstance();
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}
	
	class CoffeeIterator implements Iterator<Coffee>{
		int count = size;
		public boolean hasNext(){
			return count >0;
		}
		
		public Coffee next(){
			count--;
			return CoffeeGenerator.this.next();
		}
		
		public void remove(){
			throw new UnsupportedOperationException();
		}

	};
	
	public Iterator<Coffee> iterator() {
		// TODO Auto-generated method stub
		return new CoffeeIterator();
	}

	
	public static void main(String[] args){
		CoffeeGenerator generator = new CoffeeGenerator();
		for (int i = 0; i < 5; i++) {
			System.out.println(generator.next());
		}
		
		for (Coffee c:new CoffeeGenerator(5)) {
			System.out.println(c);
		}
	}
	

}
